package belf.migrate.api.exception;

import belf.migrate.core.exception.BelfErrorCode;

public enum APIErrorCode implements BelfErrorCode {
    METHOD_NOT_IMPLEMENTED("API-1001", "该方法还没有实现"),
    NO_DATATYPE_MAPPING("API-1002", "源端到目标端缺少类型映射"),

    CONFIG_VALIDATION_FAILED("API-01", "配置信息失效"),
    CATALOG_INITIALIZE_FAILED("API-02", "Catalog 初始化失效"),
    DATABASE_NOT_EXISTED("API-03", "数据库或Schema不存在"),
    TABLE_NOT_EXISTED("API-04", "表不存在"),
    FACTORY_INITIALIZE_FAILED("API-05", "工厂初始化失败"),
    TABLE_ALREADY_EXISTED("API-06", "目标表已经存在"),
    TABLE_CREATE_FAILD("API-07", "创建表失败"),
    FOREIGNKEY_CREATE_FAILD("API-08", "创建外键失败"),
    INDEX_ALREADY_EXISTED("API-09", "索引已经存在"),
    INDEX_CREATE_FAILD("API-10", "创建索引失败"),
    DROP_TABLE_FAILD("API-11", "删除表失败"),
    TABLE_ALREADY_HAS_DATA("API-11", "目标表已经存在数据"),

    VIEW_ALREADY_EXISTED("API-20", "视图已经存在"),
    VIEW_NOT_EXIST("API-21", "视图不存在"),
    VIEW_CREATE_FAILD("API-22", "创建视图失败"),
    DROP_VIEW_FAILD("API-23", "删除视图失败"),

    TYPE_ALREADY_EXISTED("API-30", "自定义类型已经存在"),
    TYPE_NOT_EXIST("API-31", "自定义类型不存在"),
    TYPE_CREATE_FAILD("API-32", "创建自定义类型失败"),
    DROP_TYPE_FAILD("API-33", "删除自定义类型失败"),

    TRIGGER_ALREADY_EXISTED("API-40", "触发器已经存在"),
    TRIGGER_NOT_EXIST("API-41", "触发器不存在"),
    TRIGGER_CREATE_FAILD("API-42", "创建触发器失败"),
    DROP_TRIGGER_FAILD("API-43", "删除触发器失败"),

    PROCEDURE_ALREADY_EXISTED("API-50", "存储过程列已经存在"),
    PROCEDURE_NOT_EXIST("API-51", "存储过程不存在"),
    PROCEDURE_CREATE_FAILD("API-52", "创建存储过程失败"),
    DROP_PROCEDURE_FAILD("API-53", "删除存储过程失败"),

    SEQ_ALREADY_EXISTED("API-60", "序列已经存在"),
    SEQ_NOT_EXIST("API-61", "序列不存在"),
    SEQ_CREATE_FAILD("API-62", "创建序列失败"),
    DROP_SEQ_FAILD("API-63", "删除序列失败"),

    FUNC_ALREADY_EXISTED("API-70", "函数已经存在"),
    FUNC_NOT_EXIST("API-71", "函数不存在"),
    FUNC_CREATE_FAILD("API-72", "创建函数失败"),
    DROP_FUNC_FAILD("API-73", "删除函数失败"),

    DDL_EVENT_NOT_SUPPORT("API-99", "DDL事件目前还不支持"),
    INVALID_CHANGED_EVENT("API-100", "不支持的数据变动事件"),

    CONVERT_TABLE_ERROR("API-101", "转化表的DDL失败"),
    CONVERT_VIEW_ERROR("API-102", "转化视图的DDL失败"),
    CONVERT_CLASS_ERROR("API-103", "转化对象Class的DDL失败"),
    CONVERT_TYPE_ERROR("API-104", "转化自定义类型Type的DDL失败"),
    CONVERT_TRIGGER_ERROR("API-105", "转化触发器的DDL失败"),
    CONVERT_FUNCTION_ERROR("API-106", "转化函数的DDL失败"),
    CONVERT_PROCEDURE_ERROR("API-107", "转化存储过程的DDL失败"),
    CONVERT_SYNONYM_ERROR("API-108", "转化同义词的DDL失败"),

    CONVERT_MYSQL_DDL_ERROR("API-111", "转化MySQL的DDL失败"),
    CONVERT_ORACLE_DDL_ERROR("API-112", "转化Oracle的DDL失败"),
    CONVERT_SQLSERVER_DDL_ERROR("API-113", "转化SQLServer的DDL失败"),

    SQL_EXECUTE_ERROR("API-201", "执行SQL语句失败"),
    DDL_EXECUTE_ERROR("API-202", "执行DDLL语句失败"),

    QUERY_TYPE_LIST_ERROR("API-211", "查询所有自定义TYPE的名称失败，请检查SQL语句"),
    QUERY_TYPE_DDL_ERROR("API-212", "查询自定义TYPE的DDL失败，请检查SQL语句"),

    QUERY_FUNCTION_LIST_ERROR("API-221", "查询自定义函数的名称失败，请检查SQL语句"),
    QUERY_FUNCTION_DDL_ERROR("API-222", "查询自定义函数的DDL失败，请检查SQL语句");

    private final String code;
    private final String description;

    APIErrorCode(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

}
